package com.arron.template.improve;

public abstract class SoyaMilk {
    //模板方法，不让子类去覆盖，final
    final void make() {
        select();
        if(customerWantCondiments()) {
            add();
        }
        soak();
        beat();
    }

    //选配料
    public void select() {
        System.out.println("第一步：选择好的新鲜黄豆");
    }

    //添加不同配料，抽象方法，子类具体实现
    public abstract void add();

    //浸泡
    public void soak() {
        System.out.println("第三步：黄豆和豆浆开始浸泡，需要3个小时");
    }

    public void beat() {
        System.out.println("第四步：黄豆和配料放到豆浆机打碎");
    }
    //钩子方法，不需要配料
    boolean customerWantCondiments(){
        return true;
    }
}
